Regresja jednej zmiennej

Mamy zestaw danych "fires_thefts.txt", który opisuje autentyczne dane zebrane przez "U.S. Commission on Civil Rights". Pierwsze kolumna opisuje liczbę pożarów w pewnej dzielnicy (na 1000 gospodarstw domowych), druga kolumna liczbę włamań w tej samej dzielnicy (na tysiącach mieszkańców). Należy przewidzieć liczbę włamań na podstawie liczby pożarów.

Zadania

Zadania należy wykonać w tym notebooku (nie w notebooku z wykładu), prezentacja wyników powinna być czytelna. Nie akceptujemy rozwiązań w luźnych plikach pythona:

  1. (Wprawka) Uruchom notebook Wykłady/03/Regresja Liniowa 2.ipynb, przeanalizuj kod związany z regresją, pobaw się ustawieniami.
  2. Wykorzystując kod z wykładu, stwórz wykres punktowy dla dla podanych danych. Zwróć uwagę na poprawne oznaczenia osi itp.
  3. Dodaj dowolną prostą z ręcznie wybranymi parametrami $\theta$, oblicz wartość jej błędu $J(\theta)$.
  4. Oblicz parametry $\theta$ krzywej regresyjnej za pomocą macierzy normalnej, przedstaw na nowym wykresie.
  5. Oblicz parametry $\theta$ krzywej regresyjnej za pomocą algorytmu gradientów prostych (Gradient Descent, GD), można wybrać wersję iteracyjną lub macierzową) i przedstaw na nowym wykresie.
  6. Dla różnych wartości $\alpha \in \{ 0.001, 0.01 , 0.1 \}$ ($\alpha$ to długość kroku) stwórz wykres, który ilustruje progresję wartości $J(\theta)$ dla pierwszych 200 króków algorytmu GD. (Wykres ma zatem na osi x kroki od 0 do 200, na osi y wartosci $J(\theta)$, oraz przedstawia trzy krzywe, po jednej dla każdej wartości $\alpha$.)
  7. Wykorzystując uzyskaną krzywę regresyjną przepowiedz liczbę włamań na 1000 mieszkańców dla dzielnicy, gdzie występuje 100, 150, 200 pozarów na 1000 gospodarstw domowych.

In [1]:
# Nagłówki

import numpy as np
import matplotlib
import matplotlib.pyplot as pl
import IPython.html.widgets as widgets
from IPython.html.widgets import fixed
from IPython.display import display

import warnings
with warnings.catch_warnings():
    warnings.simplefilter("ignore")

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

from IPython.display import display, Math, Latex